C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6618|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 {6 @3 M) U) n0 N: {
main文件:
  s% A! `" X' U" |0 F1 r. s+ `interrupt void interrupt4(void)  7 f9 ^) h7 B# p$ t' J2 ^
{
. t0 r& B6 D+ e. _  Uint32 sample;2 r2 @  `1 D1 |( o  a
  {/ p1 u/ ~6 O/ ?. X6 @( |
  sample = input_sample(); // read L + R samples from ADC3 q3 ^* @! Q6 t1 V
  output_sample(sample);   // write L + R samples to DAC , d- _/ P* \4 q& _  E. Q
  return;4 s( S1 ?4 ]% i# ]/ r* a
}
9 _9 F; |& k, Z1 g- R8 v% @$ y1 b2 J' M3 w! K
int main( void )
' X3 n# X3 E9 p. E1 n{. K2 e3 ~4 |3 p% t# n; z
5 V6 z% p: }; |
    /* Initialize BSL */- [; f' y1 R3 i
    EVMC6747_init( );. f+ x+ k. [8 ]* t4 [
        /* Call evmc6747_intr function */
6 f% l; q" M+ n5 Q" ?    aic3106_init( );( p# F7 i$ O' q
        while(1);4 m( \0 I* x: h0 i% e
}; {: p# k' [  h) P  f- R! u8 w

# v% i/ k4 w& r( t0 N0 L" S" E5 p; K1 {' c4 d  ^) K
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 ]' C6 i7 V) G" f  i- J/* Initialize MCASP1 */
  O  m" G8 \" w0 \, K    mcasp = &MCASP_MODULE_1;  ^0 O# [9 U8 F: z3 B. ?/ u( v
    mcasp->regs->GBLCTL  = 0;       // Reset+ I0 X& J) @2 d( W0 E6 d9 F
    mcasp->regs->RGBLCTL = 0;       // Reset RX4 u. Z- b) j* J/ W
    mcasp->regs->XGBLCTL = 0;       // Reset TX
: d" M$ _# O) I! t    mcasp->regs->PWRDEMU = 1;       // Free-running
) k" p; g5 B4 ^# {* ~! A# G  E   // configure McASP0 receive registers2 D9 d7 h; e3 g
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used# x( r/ [5 K; B* T! A
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" H5 @2 t4 n* `/ p  S* l
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 P- L' b0 J7 v3 |' `& ~    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- q8 n8 }1 y* q3 w    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  s4 R+ M% [0 @9 ~" r6 ~( e# v
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# \" g4 p( h6 W4 ~/ D    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 s) f# r  s  r9 W6 u/ `* A/ S0 _  W
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  d$ j$ i5 g( q; v; Y, e- V2 a, M$ x, t. G! v" q$ X$ I8 k( ]
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
! k2 x4 \4 B3 H; H9 Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. E" w! `! B, O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 N0 o! _4 O' Y' @, a/ j6 I
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& b. H0 e6 ^0 g# j) u    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ [: Q# r$ q0 x
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, ?$ F/ e5 [4 g' e+ @, o! N
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 `8 q- S  u* r+ }2 \5 d    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 b2 j5 M' _$ }+ _4 B& M7 i/ M9 M2 ]2 D; v6 o" i
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ [6 l* u: @# {0 W2 y; K    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. l4 N) j+ Q: R! q2 }
    mcasp->regs->PFUNC      = 0;          // All MCASPs7 D$ a# I8 k* Y2 Q; w! q: k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
% f; {6 r9 f6 o$ D
4 U' t, j. a2 M6 W    mcasp->regs->DITCTL     = 0x00000000; // Not used
% A  a; k+ `0 \    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 |) `! E) o0 p4 A: k# y) e    mcasp->regs->AMUTE      = 0x00000000; // Not used- j$ V) B0 Z& Z4 f
. y6 M- R1 W; k9 T3 H% C1 k" E
/* Starting sections of the McASP*/
, H) S2 ?4 _& Z8 d. F; D, K    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 y$ [5 L. n- b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' C$ X% `! K7 C9 G% v: L6 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / @) E1 y& K) `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" A5 }& P5 A; q7 \# G. s* R
) D% E1 }% P& ]* q8 f8 N    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 e3 @: @9 s+ u. Q! y, B- p/ ?2 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* M. O8 N# `5 J, W    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- @+ U' G7 A0 S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ I* ?3 V7 ?6 }' g

: o3 b( e. K7 G5 ^    mcasp->regs->XSTAT = 0x0000ffff; 2 A3 w6 t8 o7 `% k
    mcasp->regs->RSTAT = 0x0000ffff;
' `3 W& O+ C- m: O  U6 S0 P/ L/ Z9 I% e9 A7 Q0 o. ?5 n# j7 ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 U' F  l; `" c9 t: U$ y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ u' t% t; {) W0 |! f" d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   v3 f) @2 ~' g3 n6 I& [5 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# V/ Y* d4 J  `: ^0 P
" k, l* V" n4 t* D3 J" P
    /* Write a 0, so that no underrun occurs after releasing the state machine */
. |; l& h8 `! K' R7 U# t    mcasp->regs->XBUF5 = 0;# F" e' M! n1 @) s
    mcasp->regs->RBUF0 = 0;/ b8 J: ], n" u8 e6 t8 \
! `- W) N% K; b; j. }1 f- S( B
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; k: Z" y0 o# G) E2 U; u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 E6 l+ q/ \9 a* V    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ l" p) X9 _1 N' Q1 D* B2 {4 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( H" Z+ F: M: k1 H2 Q, o& N# Q: S) d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; `# L( @; g+ C' [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! M% |; J# T$ C    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 s% Q+ `# B' O7 _, K. u- O! e0 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 i6 ?1 q. B; m7 z
4 e2 {! \$ \& O" }    CSR = 0x0000;
! X. V' L( {5 s9 Q1 u0 ], [    INTC_INTMUX1 = 0x3d;
/ p/ l2 q( m5 U! R6 y  v    ISTP = (unsigned int)vectors;, D- K) [/ T& c& N
    ICR = 0xFFF0;  8 S( D7 a+ y0 e2 z! O
    IER |= 0x12;  & ~. A5 g) K7 [3 O
    CSR |= 0x01;  5 b, n& R; T7 {

+ C( m/ z4 J/ e# C# f
) a6 x$ `$ p# `2 `7 E- _! z* R$ r- O8 z# H& H4 |
还有就是两个输入输出函数:/ E+ }$ X& n+ K* I; N: A4 X" ?3 h
void output_sample(Int32 out_data)
9 {* b9 o+ X$ l& I% y4 s+ o{1 L/ B* w( P& z* j* |% d! X
  AIC31_data.uint = out_data;  2 X, |) n+ s# \
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; X0 i" m1 {" l: U7 i3 n}
4 _/ t+ L* A: u9 j. J3 |2 b0 M
. G9 T) J7 L% n) t, t  p3 cInt32 input_sample(void)
- W' @& j/ {3 ~{  ) c! s% C% \5 R! c' r# g9 t: g! x
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, u$ S$ O; Y: X/ m& ~) l, a  return (AIC31_data.uint);3 ?, \4 @5 f6 U3 e2 q7 }& n: r
}
; ]- J( s/ }" {9 M" ]2 Q" Q* \, |& A4 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-21 13:19 , Processed in 0.041806 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表