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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% K) u: g& x( ~8 Omain文件:2 L1 s9 P! x. ~
interrupt void interrupt4(void)  * @7 y# d/ G: p4 B; \
{
( w" l: `) k- E, f  Uint32 sample;
0 K3 T/ e& g1 F. a
4 V, y, V, K' _2 p  sample = input_sample(); // read L + R samples from ADC! k: h. M$ t2 H. u; A! A* ~1 p
  output_sample(sample);   // write L + R samples to DAC ; g  _# j4 T2 m- O, u3 r2 v
  return;* S; Y  ^9 P: d7 M2 N
}8 O! }  w) a$ A0 y' }0 t3 b  I0 H  U
$ y  A" e$ n2 V" G2 M+ [
int main( void )
; a2 n3 S* b, h: Q% c/ Z* B& v  ?{4 }5 ]% t) Y. n

5 l3 r; o' w0 v    /* Initialize BSL */
) q0 [* [$ k4 I. c6 g    EVMC6747_init( );" s, }3 `+ p% u) _! T7 R- i2 U
        /* Call evmc6747_intr function */
5 ^8 y/ n4 u: d* y    aic3106_init( );
% `4 X8 a( K# L6 m3 ~! m  Z7 k  I4 v        while(1);7 q' Y- o" T" V$ z$ y- Z) @: m/ ~2 v
}
( E( `9 x5 I, h1 C$ j4 Y# r/ E- J( s8 K- ?
- P) Z" @3 X$ g( ~4 r4 g/ t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. ]; \4 g% R: q/* Initialize MCASP1 */
, J! p/ s  V4 J) A* P+ i    mcasp = &MCASP_MODULE_1;, F0 P7 [, s* U- Z) C! W  A7 n/ X0 d
    mcasp->regs->GBLCTL  = 0;       // Reset
2 s' O+ ~7 Q7 g, c4 H" Z8 {* Y    mcasp->regs->RGBLCTL = 0;       // Reset RX
, _& s9 c7 w5 f. [) g3 G) `    mcasp->regs->XGBLCTL = 0;       // Reset TX4 o' l& U' c" O9 {  M- ^1 j
    mcasp->regs->PWRDEMU = 1;       // Free-running9 \" s6 I' B: n! X8 x2 R
   // configure McASP0 receive registers. f2 L0 t' o/ H
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( ]/ `1 [+ ?' d) G    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. P8 h) a9 B- O- f8 {5 L! y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: l9 i5 O# a0 u$ S" {" l    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 `  C* r) U- h: {8 R    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ M. W/ P9 l) R! k5 Y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) d2 H# t6 C- M# q, X1 x- Y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 e- ~, w) {; O- g' @) J    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 \5 z7 S# U  w0 P. B
( a5 Q! U; ?9 P6 F    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' ~/ {- M6 t8 M1 H1 r) @" h    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' M1 V; ~% z; k9 f* g" z; f
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& x; k! h3 k& a; n* Y5 W    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( d8 U3 r5 Z  Y. p3 q# R  _, S    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- W- S& F! T- m    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& D5 m7 y* q' E: U0 i  ~6 j1 m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 Y8 a. s9 K' a0 P2 X
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. c' A' w3 e) q! K- A* I1 z# t: R- c% q, |4 [9 A2 n& ~; w
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 M+ H% t7 J7 V& G! `
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 |0 i1 g0 y) ?! l1 H: ^    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 D- y9 |% w0 y- P. z* r4 h    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 N' S0 c* b2 ~% _
* `! P9 P' U/ V    mcasp->regs->DITCTL     = 0x00000000; // Not used: g, B" m- t3 c1 \
    mcasp->regs->DLBCTL     = 0x00000000; // Not used8 U! I  o/ j& F* x& a
    mcasp->regs->AMUTE      = 0x00000000; // Not used+ \- m4 w4 ?  r1 g' s8 {

8 @& J: H# p9 Z, g" f* g: K: t+ b/* Starting sections of the McASP*/
1 g! Q' x4 o& s    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   e" Z3 l5 {5 z  p' V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 I/ T, }# N3 c% w# Q) P3 p
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , Z" u, s4 B) l# b+ U$ _, j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" v6 O; I7 S  P4 y/ u7 X* N
* M3 Q* R9 ^/ u  s    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' {! z  K9 W' M/ {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 N8 F6 d. F; j
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( k" [& c! w; \" N1 H; @% y$ M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 i9 j  I* b( T4 `2 @: F' B7 Q- J. j, `) @# m: s  m, {
    mcasp->regs->XSTAT = 0x0000ffff;
' G) s' s7 T7 H    mcasp->regs->RSTAT = 0x0000ffff; 6 G* n( a6 ^% b3 I, e

# m$ N* R8 c2 N$ t# r: T    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 W- ?; m3 k' U3 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( p! G! c0 Z* W7 E! L    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ [. s2 i2 A3 H; ^" h% O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 y9 Q) E4 @* {
  S4 f  L! i# D/ C: i
    /* Write a 0, so that no underrun occurs after releasing the state machine */
# C' @& W  }& P7 o0 t5 [9 T$ v    mcasp->regs->XBUF5 = 0;' K6 r: V3 Y9 y6 r& }) n+ F# i4 o
    mcasp->regs->RBUF0 = 0;
7 H% H6 G2 J8 o4 r3 x! v9 G( w# t7 ?# p! A  M/ ]9 `# [5 |
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 {8 g# Q: G5 R$ J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( r5 Y+ _/ L% i0 u0 ?" v2 a    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + A1 `& |5 y8 p( ?8 y- ~' c1 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' o. ?& d1 A3 L- \
  G+ S) c8 T9 l3 f8 {6 Z* l' h8 T    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + {1 p  R1 q- ^" X' f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' D# {+ U9 ~5 m% x# v0 i    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 Z" p& k  d  K5 I  R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. y% p+ v( @5 O  T9 ?& O( G5 s5 o) H6 t$ A- T- ^- s+ B, Z7 O
    CSR = 0x0000;- f' N6 O7 F6 w6 J( ~# Q
    INTC_INTMUX1 = 0x3d;
  o4 A6 V4 d7 d* j    ISTP = (unsigned int)vectors;) s! b$ _+ E# d5 P3 {2 b
    ICR = 0xFFF0;  
2 ^. B* }, ?6 k8 J    IER |= 0x12;  $ J% K8 `' G) N  m- y# |  S- P( n
    CSR |= 0x01;  $ T8 o- T( i. C# ^/ G2 V

8 a' e4 G8 K! j+ P
2 u/ L. K! t# p; C
- e. h( U2 G- l; G- W9 i4 N还有就是两个输入输出函数:
% ^3 W7 k$ N" Z2 P. ~! @void output_sample(Int32 out_data)  P) n% y' F0 y
{& e% s$ m$ _/ S( D$ V
  AIC31_data.uint = out_data;  
( N7 x0 A2 X3 f9 s; T2 Q6 E  MCASP1_XBUF5_32BIT = AIC31_data.uint;" F5 r+ C7 |. h% L+ N
}' E% C, z+ m' ?5 ?: Y

7 D8 ^- `7 T2 ^7 N6 cInt32 input_sample(void)3 q: j2 Q* k- q2 k2 m& @- _' h
{  
0 u) `' ]& K; X2 U1 |! R  {  AIC31_data.uint = MCASP1_RBUF0_32BIT;
  _! M! B4 `$ v( I9 p! T4 J6 r; ~  return (AIC31_data.uint);
; F  p/ J8 Q+ r% @/ d}
  e& a" `6 j7 H' T( n! q/ z/ @4 D/ Z/ D( M/ _* ~
分享到:  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-2-4 11:03 , Processed in 0.054863 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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