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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( a5 ?5 R; u6 l9 z1 m0 {/ ~main文件:2 J7 _, u0 {" R2 A6 L. \
interrupt void interrupt4(void)  4 G9 k1 l. }  C  B" q8 l  ]
{
1 p# ~4 I1 p. V; d" T, y  Uint32 sample;
( m+ }( W/ C" H# [. K" A% V& I$ t6 |$ K% P. D
  sample = input_sample(); // read L + R samples from ADC6 L1 H1 C2 v1 Z" G: }
  output_sample(sample);   // write L + R samples to DAC
) Y9 g: I; H: d/ |8 P. C  return;
1 `$ Q3 K5 c7 U' I: \# |}
$ w+ C  |" n- L3 V0 Y/ j/ M6 g9 P" V" T4 V' B
int main( void )
  |0 m6 |& {! V/ J4 [: H' _{
6 Z% \# u  z8 E6 |- A4 x9 r6 m, P6 V, n
    /* Initialize BSL *// A% D4 _2 D3 Z* n8 ]
    EVMC6747_init( );- S8 |; R# t- m4 y+ X
        /* Call evmc6747_intr function */8 v" X" b" p! J8 a. F- Q
    aic3106_init( );
0 n' f3 f8 B8 r) v) E* O: w        while(1);/ T% M& l* ?4 W9 k8 W
}
/ g. A3 Z. t4 v) `% {' x2 B+ ]7 K& H3 {  K4 h- Q! L0 B; {/ }
8 B- O6 @( W7 x6 M
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. K5 S. H6 Q6 ~  R, L% c& X3 t
/* Initialize MCASP1 */
1 I: n* e7 {4 H% [5 y- X! e    mcasp = &MCASP_MODULE_1;! ]( P7 p! L8 m" f: w4 c0 r0 Y$ E
    mcasp->regs->GBLCTL  = 0;       // Reset
. y' d# N& p& r+ D: y    mcasp->regs->RGBLCTL = 0;       // Reset RX
) l) u+ {" r  o) w' `: b1 C8 c& M    mcasp->regs->XGBLCTL = 0;       // Reset TX
" x! c& }  b$ g    mcasp->regs->PWRDEMU = 1;       // Free-running
( l2 t+ h2 R, }* Z. m7 }   // configure McASP0 receive registers
4 U2 S$ L8 H7 R# A9 ]9 d* t9 a6 q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* {3 ^. _7 P% R' B
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! A9 Z$ Y3 w+ }$ k0 e3 ~
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 G* P. _# Q9 W- y. [  t6 D& y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  J. j# @9 s2 @9 m: ?% D! z
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ R; |1 a2 J( g% ]    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, n2 ]/ S/ ^- C" Z; R% ]    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 [+ d2 ]! p' D5 R7 `! R0 s    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 s2 b& P" `! N& K7 s
9 H( s  A. n# i2 c" S2 q8 Y" k+ ?    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# b/ T+ w) k! [1 R    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" ^- V$ x6 d  I    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 O4 _. J6 c0 S7 c    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" z1 F9 |* ^- o/ [- ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% V3 H: t$ T/ T, f" h% R; z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 l! n# h- E0 Q. M$ u9 K5 n
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
$ c+ R1 M: N8 B) N) X    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# m! K, P9 Q4 H, k, `3 ]+ i
, i1 J' |' T" ?& k8 o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
1 X& f: X0 W) N# y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( ?, @3 n. J5 M! A; l
    mcasp->regs->PFUNC      = 0;          // All MCASPs  J& o% O/ z& v3 ]6 D) [- w3 Y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 f7 J' p$ B9 x9 i0 M

& z" j" O' p/ J, A6 k, L    mcasp->regs->DITCTL     = 0x00000000; // Not used; z$ |2 ]: N7 X; B) c* R  _% ]9 ^
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ l& H: n& L0 J3 X* k# N    mcasp->regs->AMUTE      = 0x00000000; // Not used2 b& r5 v* g+ C! M, J5 j
  a" `. o  E4 R2 o  u0 B) O. ]
/* Starting sections of the McASP*/. `" N/ ~, ?3 b1 b6 Q, o
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! S' x' x' {  r# w& j) _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + `/ T' ?5 b6 |) q' F; |3 V) G+ @7 P
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ B3 i) T0 b; Z& [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 N& T# y- ^$ K; G
3 T$ H2 `9 e7 n/ m4 t- t
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 y- R& f4 T! y5 c0 C- I- P* Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; T5 a% W8 Y& \+ U: p" p2 a    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 n& @+ _/ O  b& |: }- [  f5 b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 ~9 e* W% I, Q
; |4 G( h$ P! r& J* u
    mcasp->regs->XSTAT = 0x0000ffff;
+ f- x- z% s3 J    mcasp->regs->RSTAT = 0x0000ffff; 4 j$ H& y; y% a  V' Y

2 G0 s0 n" n3 ]7 r/ ]    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 L) u6 a. u+ a9 S, |7 e/ X* M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! }5 b# e/ z5 V* z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 O$ w" A/ s) e4 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 s5 l2 @6 {$ R1 _. C+ e& y( K0 v# R5 x8 z: e, m* Y: k) J. O) Y  r
    /* Write a 0, so that no underrun occurs after releasing the state machine */
. I( o2 F+ R' _2 n0 B- @    mcasp->regs->XBUF5 = 0;4 W  ^4 k4 w4 K$ v+ i, e
    mcasp->regs->RBUF0 = 0;
. e3 p# J& l' d* G% u  j; N. r. P4 i" x" U6 Q+ [
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 R! J8 U+ Q1 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: }. n; E9 [4 |
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' A' d0 ]) O4 G& `3 b7 S2 l/ E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& O4 A3 a2 K" k  x! [
2 S+ h; l# l3 d8 n6 u% Y0 X% ]
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; k7 g, N4 Q3 r! s3 Q, V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" W9 Y1 f2 i2 r( Y, X    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. N8 h1 O2 J' C; T; t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* g, @! C: ~2 K% s8 N4 [0 q1 N
+ x/ h$ I7 S: a. {7 G, D* }
    CSR = 0x0000;
. W+ X) m; y5 n  \9 y1 l. _0 H    INTC_INTMUX1 = 0x3d;- k( U2 p' P1 N
    ISTP = (unsigned int)vectors;  J8 z8 Q7 A. S1 j2 F3 R- ?
    ICR = 0xFFF0;  
/ J5 o$ s0 Q1 A% E' L6 _1 s    IER |= 0x12;  6 E7 {: Z' x+ m
    CSR |= 0x01;    P# j6 u& I8 ?: K+ \+ u
" y* r0 ~5 x4 G6 E6 j  w3 I
- ]! t: U; s/ Q( z! W. @/ @5 \

( t" O+ ^9 U& j7 t4 u1 Y6 t还有就是两个输入输出函数:
& }) n# F: A, k! p9 m! Gvoid output_sample(Int32 out_data)2 U8 U, B& g% J
{
; E& P- C% |( ^# g, m0 s4 U  AIC31_data.uint = out_data;  & x! ^: g3 _4 \" U% G
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 J, Y" F$ d; b; @3 `/ v}
% N* u0 \2 x1 H2 ^* G, L0 F- t7 g; j3 @( I3 a) R4 K
Int32 input_sample(void)8 c" A$ h4 O+ z  F0 u- e
{  8 ?4 X% f) R, {" E0 a
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; N+ i- H& s/ l' c: O4 r  w  return (AIC31_data.uint);+ i; q3 y' q  {- s" I% t; t
}. n# i4 O8 `1 |$ s/ o/ f8 |  G

/ u" q7 g/ [0 y% J* Z$ G* a" v
分享到:  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-10 04:40 , Processed in 0.049600 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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