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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ a" B, o) z$ c( F) b) N$ A2 omain文件:+ g3 P7 u1 l) O/ Y1 E1 z
interrupt void interrupt4(void)  . A" A( d0 r  ~4 e! y6 }# L$ f" S
{
, v, V: ^( W5 s  Uint32 sample;
, u2 K( E, E3 |- ?: M' z) l* h  C# Z" V$ m
  sample = input_sample(); // read L + R samples from ADC
* K. T% v0 Z& R% C. ^  output_sample(sample);   // write L + R samples to DAC - J7 J- }2 }" N
  return;3 W8 i" X: z" @: C0 U; Y
}
$ o$ A6 _5 }" F; ~2 T2 i" C2 j% t7 E( U3 F) r' ^; q# l1 z
int main( void )
5 ?  x5 X- d9 K2 k7 D{
, Q+ ]- N/ n1 [4 g% c$ K9 f- b$ |$ D) E$ f
    /* Initialize BSL */  |" B0 U# Z/ `' [8 w
    EVMC6747_init( );
, C4 R8 ]) H/ M# c        /* Call evmc6747_intr function */
9 S' o+ _# |# i8 `    aic3106_init( );- h! Y9 X1 S4 d2 X0 d
        while(1);3 Z% [2 E; K0 G2 o& j
}4 X; O) j6 F/ S% {
5 u* M, t' U2 d

' N# a* _  t* m$ @: ~aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, S7 G% d* O( i+ x# o
/* Initialize MCASP1 */
6 A( g# P" L' [    mcasp = &MCASP_MODULE_1;" B% u2 @- p! S# E/ O( W
    mcasp->regs->GBLCTL  = 0;       // Reset
8 ~# S% i( V- p2 ]7 P: j: c    mcasp->regs->RGBLCTL = 0;       // Reset RX" K1 I6 I& B) W  \9 M* h6 k% T1 M5 a
    mcasp->regs->XGBLCTL = 0;       // Reset TX" G; m: L; k  r, ]+ T+ X
    mcasp->regs->PWRDEMU = 1;       // Free-running
2 W- ^! L" e% o" Q+ v   // configure McASP0 receive registers
/ T5 P2 x  ?' w! q) d    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used5 T$ o# L$ d7 ?! T& W5 r% v( H
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, M1 H7 `% u4 f4 }; h1 {' d0 A- a    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ j1 h5 `9 k0 z9 |/ }
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ z7 b& m3 z& z8 m' R8 i    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" s8 r( f1 g' r    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. C. E/ m1 }% s/ S% P
    mcasp->regs->RINTCTL    = 0x00000000; // Not used; |0 N% u; q( Z) a) Z, t1 \
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 U7 j0 E$ {6 O2 |/ ]& H0 t% |/ R9 B, w7 u
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 o! A: h5 s5 z( c7 Q9 F$ ~    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 D( v% j  ?* L7 T
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 p! i" s+ a, y+ j    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& t# A* Y5 K( ]/ e* Y: }
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( [* K- r& S. Q, T2 k4 S) M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 r- t' _) J  ]  d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit" g% M3 D# m7 F  W$ g; ?
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) t( i1 H. v" w/ l6 f1 j4 j
. e8 ?8 l8 C+ J- H
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 S- ?& z. z2 F( m- X  u; X9 o    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
6 r* E( T2 s$ n3 o4 _5 U* q    mcasp->regs->PFUNC      = 0;          // All MCASPs0 |6 o7 a5 p8 Y7 P% }& i
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, m/ f' k6 ?, a; e2 i' K
( C/ o( p$ q3 D2 ~6 C    mcasp->regs->DITCTL     = 0x00000000; // Not used
: Z6 D# m: S- u/ C8 d    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 q3 ~/ @0 n0 g; }3 U$ p+ x5 G
    mcasp->regs->AMUTE      = 0x00000000; // Not used9 ?$ C- `) z: q

, s1 b7 q7 p& \; _/ [2 z' B/* Starting sections of the McASP*/
, _) a9 U9 ]8 ]. Z1 _  {    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ h3 |- A; T. P" [4 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 q% Q( g  L1 k7 N8 M" A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 V+ d# Q/ t5 f! `/ O5 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  f/ E' d0 V. x2 W
: Z- u& M4 [# C+ A    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! q5 b3 o( w( K3 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 S" {4 _3 [/ t( ]  r    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ n+ d+ A( F5 P$ J6 `7 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! v$ R4 [3 [& f( u5 S. b3 @& y0 n% b
$ c* i5 @5 W) v( @    mcasp->regs->XSTAT = 0x0000ffff;
1 a' J" u& G% V6 {% i/ r    mcasp->regs->RSTAT = 0x0000ffff; 5 p% F% X  Y: j, z0 Q6 c

# c4 W1 b! Y' e; I2 e& o    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ q9 Y  m1 q4 w9 i* t% m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% n* K6 l* s/ `3 \7 k: O
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   |2 X& k6 P7 F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, d0 ]$ Y  Y% _3 n  a# m
# L; ]" R. }! _- |0 Y" ]
    /* Write a 0, so that no underrun occurs after releasing the state machine */
# u  g' m: T2 B2 D. p( h( E. H. J    mcasp->regs->XBUF5 = 0;
' e1 `/ [' [5 ]/ v    mcasp->regs->RBUF0 = 0;8 h1 k$ Y5 Y, a% z; o' ^& ^
) `3 x, L3 ^# `4 N$ V
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   x% h, u; ]% M8 O, F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ ]8 E/ V6 b6 q7 H+ u- P: i    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 X: {, `! }) e: r2 Q+ y6 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" V9 @& h8 [* o5 c( _

" n/ w1 l+ K, o" w" z8 U    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / C' ^/ g" T; r4 X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. _6 v& p. j$ P* T' V0 ?" h. ?    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 O! M% J0 e+ l  _0 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ \! W) {  u6 [: W6 B. w
0 U7 @. A1 n" I0 J8 X5 a" y    CSR = 0x0000;
  `  j! b, p6 K) a4 t' {. ?    INTC_INTMUX1 = 0x3d;
: E5 g) D6 T( i3 E2 U: J  k) R    ISTP = (unsigned int)vectors;
0 |9 A" ]# F+ x2 s4 I; s    ICR = 0xFFF0;  
$ |  S; G) T7 q! C2 d. t    IER |= 0x12;  
. L7 u. P8 ?- D2 n    CSR |= 0x01;  
0 v1 r6 ?, I1 J4 i
9 ^$ a( k' T+ K* W8 O  j3 m9 Q# |, l. w. u1 _2 z- _0 W
0 Z& r$ Z9 L! |! {+ V( j
还有就是两个输入输出函数:
$ J+ Y. c# ~2 Ovoid output_sample(Int32 out_data)
  J0 o6 u- E. m7 M5 k/ F7 Z, z1 f{2 s  Y0 M( m+ @* i, v
  AIC31_data.uint = out_data;  
3 @* ?- L) Y9 `0 e+ `+ o2 N  MCASP1_XBUF5_32BIT = AIC31_data.uint;
& @! H& f$ N; ]- s# Y5 P4 t+ w}% V! `& q8 U% N) i' k

8 q* k2 J# [! ~  n  D2 T' ~' _2 xInt32 input_sample(void)1 {* N; B6 ^0 y3 o% c4 k! {) B
{  ( u+ A) y* y5 {2 w8 u0 m- M# B
  AIC31_data.uint = MCASP1_RBUF0_32BIT;' j1 Y! G$ P. K
  return (AIC31_data.uint);
* q: i- c4 `8 w% O$ ~}! K* ~5 J% l& c7 D6 f, y5 r, I
' l! U: u+ A; V$ j
分享到:  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-4-1 22:52 , Processed in 0.055107 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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