C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 R0 ~& e- H* O! C
main文件:% M- `; p" d7 y
interrupt void interrupt4(void)  
: Y- Z. |+ y" Q+ }; O, j. Q4 O{
3 {) R6 L% y. m5 N/ R  Uint32 sample;+ `" U% p6 b8 i8 t$ Q& B: a* Q8 P

* _" z6 C1 {2 G& L1 _6 ?  sample = input_sample(); // read L + R samples from ADC0 h/ {7 V0 o. K  e
  output_sample(sample);   // write L + R samples to DAC $ I# x! c  O! R  C* N
  return;
6 D+ X+ Y1 R" v& _: W" L0 _8 [0 R) ?}) S, ?& _- F0 S7 r( Y9 C
/ U0 s( W- R1 N* s
int main( void )! b9 S8 c5 g; a6 {
{
$ o4 X+ {4 K2 m% ?8 W
' }1 t3 M8 p: Y. U* \    /* Initialize BSL */
$ _, T1 Q, c0 ]  Z1 o4 y    EVMC6747_init( );
; q! I. t  v" ^* M' ]5 G+ ]+ t2 ^        /* Call evmc6747_intr function */& T' r* `8 D! M  o( k  H/ P- s, A
    aic3106_init( );" t/ S& l. {8 A8 a- W2 w4 ?
        while(1);; N- J9 }% \! k' D. s
}6 N/ g8 @6 J' f3 q1 }. r
0 h) t7 e2 o4 r% V" u

4 U) Q" n* o, B( x( N: P3 _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) j* f$ ~: c  d  q9 I0 Q6 W/* Initialize MCASP1 */& F8 n. O) V! d$ x
    mcasp = &MCASP_MODULE_1;7 a' O8 q' M/ R1 b
    mcasp->regs->GBLCTL  = 0;       // Reset
8 p! m! J1 B0 y7 l. S    mcasp->regs->RGBLCTL = 0;       // Reset RX4 W9 X7 J6 X1 A
    mcasp->regs->XGBLCTL = 0;       // Reset TX
- m6 L& P. x) m# f# f    mcasp->regs->PWRDEMU = 1;       // Free-running
- T, D0 u6 v% m1 @   // configure McASP0 receive registers- x0 `) E! e& B& Q" |, U
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; I# P. S0 x" X# v: o
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 D/ n0 J. R9 K* _4 p9 P! O
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  O. X- D$ `' x1 o  o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), d1 v5 u, d. U2 H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 R" v0 f% `# R# b: J, ^: @
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, k& ]9 d6 M* c5 e    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 e2 s6 |& i$ Y" Q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 Y+ }3 f, `( \/ \# U: s% ^

7 p# c) U& j: f% |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( o& A' e7 I0 c    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ E: r8 J) f, ?
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 Z6 i- L/ y6 W    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 {, E- N. S' e3 J, G# c    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- F/ e" Q2 S9 b$ @9 g    mcasp->regs->XTDM       = 0x00000003; // Slots 0,18 c2 a  h5 G) {# f6 `
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; F$ B- A5 J8 k% {6 `& |$ r
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 y& L+ Z3 Q5 i& u) |
9 F, _) W/ s6 i/ Z1 Z0 V" K
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 k: T1 `" A: e1 \    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. P( N7 Q5 z, A- z/ d9 V8 w6 W    mcasp->regs->PFUNC      = 0;          // All MCASPs" s6 e- _7 Q" ?& N2 d) x7 Y2 M
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* Z, ?! P3 W2 C& y* O5 Z/ k

9 [  I1 X6 F. S0 `! ^    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 Z  r# ?! I/ [5 h9 H4 K7 n& _' `    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ e; r$ y$ @3 @# c6 A
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ G# B4 E+ z$ l8 _! C% W* r/ ~4 R; Z3 j% n. |, ?
/* Starting sections of the McASP*/( U/ X: Y) ?; Y; R3 k9 {
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( p  x+ R0 D5 I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . g4 A8 o. V* y3 T: L# R( _' x$ X
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" y1 N# O# O% Q/ d0 }& n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 I- J: `7 w6 \( @9 f8 d
( o2 e: y; C5 Q* [% {
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 q. v. ~( i2 p; l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 @2 K3 W( N& |    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ O6 m' {; p2 |, N: y. j9 s( X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* n" A7 D8 O. l7 G8 ^
& Y6 w/ B" Y) }2 _% `% P/ z
    mcasp->regs->XSTAT = 0x0000ffff; 8 I' Z1 l/ B$ ?& f# q
    mcasp->regs->RSTAT = 0x0000ffff;
% B1 I" _. b% l9 [. @4 n. p9 e! D9 y5 V, e# V0 ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' Q0 Y. V; a* _  O2 U  _$ g; h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! k* U& D1 X( v: f) D. I; w7 W0 ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, [/ y6 U) o( P0 v5 t$ L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) Q& w6 P- x& V/ L) @
1 j3 k2 w" ?+ _, J    /* Write a 0, so that no underrun occurs after releasing the state machine */
) {, ~: t7 o& E. N9 [, F3 K- `) Q# S    mcasp->regs->XBUF5 = 0;
' s& A0 ?0 P7 I9 A1 ?    mcasp->regs->RBUF0 = 0;& f/ X7 m1 B$ m3 r

( g+ c! N) Z, _- }  p2 `    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # I6 z" _2 o$ E, `, }+ X: c* o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, `- J: `1 m+ u/ _; ^+ p; |    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. J- z' G9 p+ O8 n3 B; C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* e1 j5 f1 ^  c0 j/ Y+ ~' F) d! z! P" L2 R% f3 U
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, c3 S3 c  m0 |+ F5 N8 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 [1 O2 s- i1 y0 T, L3 o    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 j+ W* D1 t, L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 Z' i, d2 K% F* p' ?, K+ b6 W- x! ~+ L$ W
    CSR = 0x0000;
+ q$ s7 C: g' y4 l3 u. H    INTC_INTMUX1 = 0x3d;2 I3 K1 A: N/ v  s  C
    ISTP = (unsigned int)vectors;
' p" _) Z8 y9 A' E- e7 ]/ v# s    ICR = 0xFFF0;  
0 P# x1 f$ R5 E' ]8 p* C    IER |= 0x12;  
+ m7 d) B& y7 }; W8 i    CSR |= 0x01;  
6 [- J8 a8 N( g" g3 i4 X5 o8 t) E! u/ j
6 G- Z6 j8 I/ ?) _1 {

  ?* r3 F% ~# Z2 L( j; C还有就是两个输入输出函数:
& U0 X0 J5 ?5 Z' N8 n& jvoid output_sample(Int32 out_data)
; V/ e2 g; d* r  c% w% J3 m/ l{
: ]' l2 U/ k8 [2 `  Z* }% o$ \0 `+ G  AIC31_data.uint = out_data;  
7 s8 K9 A3 ]9 j! u$ [  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 N$ V) `9 G! k, u4 s5 M6 a& V
}
) e" s+ z& \1 {7 J" b: t$ N% }1 k7 Z" A! {/ I
Int32 input_sample(void)
' k/ @( x, m9 B% C) Y+ ~- d" q{  
) y: ^- l% M: u4 c- J8 N  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* M/ X: _% I  H+ E* x0 S  return (AIC31_data.uint);9 ?& }) @0 L3 a- b. A3 |7 A% N! _% {) F
}
" t* n7 {/ q2 w# y/ V$ N; q1 G/ k) M+ o& i
分享到:  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, 2025-12-2 12:19 , Processed in 0.038765 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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